#ifndef __HOME_PAGE_H__
#define __HOME_PAGE_H__
#include <pthread.h>
LV_FONT_DECLARE(SourceHanSansCN_Bold_20);

// 好友信息
typedef struct
{
    int friend_db_id;
    char friend_name[64];
    char friend_userid[64];
    char friend_avatar[256];
} FriendInfo;

// 好友列表
typedef struct
{
    char userid[64];
    FriendInfo * friends;
    int friend_count;
} FriendList_t;

// 定义好友申请项的数据结构
typedef struct
{
    int apply_id;
    char from_userid[32];
    char from_name[32];
    char apply_msg[128];
    char create_time[32];
} FriendApplyItem_t;

// 定义好友申请列表的数据结构
typedef struct
{
    int count;
    FriendApplyItem_t * items;
} FriendApplyList_t;

extern lv_obj_t * home_src;
extern lv_obj_t * input_box;
extern lv_obj_t * friend_list_box;
extern lv_obj_t * text_input;
extern lv_obj_t * input_keyboard;
extern lv_obj_t * char_box_title;
extern lv_obj_t * chat_window;
extern lv_obj_t * new_friend_list_card;
extern lv_obj_t * friend_apply_overlay;

void homepage_init();
void friend_box_init(lv_obj_t * parent);
void parse_friend_list(const char * response, FriendList_t * friendList);
void get_friend_list();
void create_chat_box(lv_obj_t * parent);
void chat_window_init(lv_obj_t * parent);
void chat_room_init(lv_obj_t * parent);
void text_input_event_cb(lv_event_t * e);
void send_private_chat(const char * message, const char * target_id);

void selfChatBubble(lv_obj_t * parent, const char * msg);
void otherChatBubble(lv_obj_t * parent, const char * msg, const char * name);
void show_chatroom_join_exit_tag(lv_obj_t * parent, const char * msg);

void show_friend_list(lv_obj_t * parent, FriendList_t * p_friendList);

// ------------------------好友申请数据模块--------------------------------

extern FriendApplyList_t g_friend_apply_cache; // 缓存的好友申请数据
extern pthread_mutex_t g_cache_mutex;          // 保护缓存的互斥锁
extern bool g_has_new_data;

void show_friend_apply_list();
void pack_get_friend_apply_list_json_request(); // 打包获取好友申请列表的json请求，并发送到服务器
void parse_friend_apply_json(const char * json_str, FriendApplyList_t * applyList); // 解析好友申请JSON数据
void save_friend_apply_to_cache(FriendApplyList_t * new_list); // 将解析后的好友申请数据保存到全局缓存
void refresh_friend_apply_list();                              // 重新拉取好友申请列表并刷新页面（供响应回调调用）

void show_user_card(lv_obj_t * parent, const char * name);

#endif